
String.prototype.zerofill = function(l) { return '0'.string(l - this.length) + this; }
String.prototype.string = function(l) { var s = '', i = 0; while (i++ < l) { s += this; } return s; }
Number.prototype.zerofill = function(l) { return this.toString().zerofill(l); }

Date.prototype.format = function(f)
{
    if (!this.valueOf())
        return ' ';

    var d = this;

    return f.replace(/(yyyy|mm|m|dd|d|hh|nn|ss|a\/p)/gi,
        function($1)
        {
            switch ($1.toLowerCase())
            {
            case 'yyyy': return d.getFullYear();
            case 'mm':   return (d.getMonth() + 1).zerofill(2);
            case 'm':   return d.getMonth() + 1;
            case 'dd':   return d.getDate().zerofill(2);
            case 'd':   return d.getDate();
            case 'hh':   return ((h = d.getHours() % 12) ? h : 12).zerofill(2);
            case 'nn':   return d.getMinutes().zerofill(2);
            case 'ss':   return d.getSeconds().zerofill(2);
            case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
            }
        }
    );
}


